/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aqu.controlador.CuentasPorPagar;

import aqu.bean.generico.BeanGenerico;
import aqu.persistencia.Dao.Contabilidad.ConCuentaManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpProveedorManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpTipoContribuyenteManager;
import aqu.persistencia.entity.ConCuenta;
import aqu.persistencia.entity.CxpProveedor;
import aqu.persistencia.entity.CxpTipoContribuyente;
import aqu.persistencia.utilidad.MessagesController;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author Verito Ramirez
 *         Victor Jaramillo
 */
@ManagedBean(name = "proveedorController")
@ViewScoped
public class ProveedorController extends BeanGenerico {

    private CxpProveedor proveedor, proveedoraux;
    private ConCuenta cuenta;
    private CxpTipoContribuyente tipoContribuyente;
    private List<CxpProveedor> listaProveedores, listaProvAux;
    private List<ConCuenta> listaCuentas;
    private List<CxpTipoContribuyente> listaTipoContribuyente;
    private CxpProveedorManager proveedorManager = new CxpProveedorManager();
    private ConCuentaManager cuentaManager = new ConCuentaManager();
    private CxpTipoContribuyenteManager tipoContribuyenteManager = new CxpTipoContribuyenteManager();
    private boolean panelvisible;
   
    public ProveedorController() {

       proveedor = new CxpProveedor();
       proveedoraux = new CxpProveedor();
       cuenta = new ConCuenta();
       tipoContribuyente = new CxpTipoContribuyente();
       listaProveedores = proveedorManager.getListOrdenado("cxpNombrePro");
       listaProvAux = proveedorManager.getListOrdenado("cxpNombrePro");
       listaCuentas = cuentaManager.getList();
       listaTipoContribuyente = tipoContribuyenteManager.getList();
    }

    public List<CxpProveedor> getListaProvAux() {
        listaProvAux = proveedorManager.getListOrdenado("cxpNombrePro");
        return listaProvAux;
    }

    public void setListaProvAux(List<CxpProveedor> listaProvAux) {
        this.listaProvAux = listaProvAux;
    }

    public CxpProveedor getProveedoraux() {
        return proveedoraux;
    }

    public void setProveedoraux(CxpProveedor proveedoraux) {
        this.proveedoraux = proveedoraux;
    }

    public ConCuenta getCuenta() {
        return cuenta;
    }

    public void setCuenta(ConCuenta cuenta) {
        this.cuenta = cuenta;
    }

    public ConCuentaManager getCuentaManager() {
        return cuentaManager;
    }

    public void setCuentaManager(ConCuentaManager cuentaManager) {
        this.cuentaManager = cuentaManager;
    }

    public List<ConCuenta> getListaCuentas() {
        return listaCuentas;
    }

    public void setListaCuentas(List<ConCuenta> listaCuentas) {
        this.listaCuentas = listaCuentas;
    }

    public List<CxpProveedor> getListaProveedores() {
        String parametro = "-";
        if(proveedoraux.getCxpCodigoPro() != null)
            parametro = proveedoraux.getCxpCodigoPro();
        if(!parametro.equals("-"))
            listaProveedores = proveedorManager.buscarPorProveedor(proveedoraux);
        else
            listaProveedores = proveedorManager.getListOrdenado("cxpNombrePro");
        return listaProveedores;
    }

    public void setListaProveedores(List<CxpProveedor> listaProveedores) {
        this.listaProveedores = listaProveedores;
    }

    public List<CxpTipoContribuyente> getListaTipoContribuyente() {
        return listaTipoContribuyente;
    }

    public void setListaTipoContribuyente(List<CxpTipoContribuyente> listaTipoContribuyente) {
        this.listaTipoContribuyente = listaTipoContribuyente;
    }

    public CxpProveedor getProveedor() {
        return proveedor;
    }

    public void setProveedor(CxpProveedor proveedor) {
        this.proveedor = proveedor;
    }

    public CxpProveedorManager getProveedorManager() {
        return proveedorManager;
    }

    public void setProveedorManager(CxpProveedorManager proveedorManager) {
        this.proveedorManager = proveedorManager;
    }

    public CxpTipoContribuyente getTipoContribuyente() {
        return tipoContribuyente;
    }

    public void setTipoContribuyente(CxpTipoContribuyente tipoContribuyente) {
        this.tipoContribuyente = tipoContribuyente;
    }

    public CxpTipoContribuyenteManager getTipoContribuyenteManager() {
        return tipoContribuyenteManager;
    }

    public void setTipoContribuyenteManager(CxpTipoContribuyenteManager tipoContribuyenteManager) {
        this.tipoContribuyenteManager = tipoContribuyenteManager;
    }
    
    
    public boolean isPanelvisible() {
        return panelvisible;
    }

    public void setPanelvisible(boolean panelvisible) {
        this.panelvisible = panelvisible;
    }

    public void llamarPanelvisible(ActionEvent event) {
        panelvisible = !panelvisible;
    }

    public void nuevo(ActionEvent actionEvent) {
        proveedor = new CxpProveedor();
    }

    public String eliminar() {
        try {
            CxpProveedor ProveedorTemp = (CxpProveedor) (proveedor);
            if (proveedorManager.delete(ProveedorTemp) == false) {
                llamarPanelvisible(null);
            }
            proveedor = new CxpProveedor();
            cuenta = new ConCuenta();
            tipoContribuyente = new CxpTipoContribuyente();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
        return "index";
    }

    public void insertar(ActionEvent actionEvent) {
        try {
            if(proveedor.getCxpSeriePro()!=null || !proveedor.getCxpSeriePro().equals(""))
                MessagesController.validarSerie(proveedor.getCxpSeriePro());
            
            proveedor.setCxpCodigoPro(MessagesController.obtenerkeyautomaticosinceros("cxp_proveedor", "CXP_CODIGO_PRO"));
            proveedor.setConCodigoCue(cuenta.getConCodigoCue());
            proveedor.setCxpCodigoTipCon(tipoContribuyente);
            if (proveedorManager.create(proveedor) == false) {
                llamarPanelvisible(null);
            }
            proveedor = new CxpProveedor();
            cuenta = new ConCuenta();
            tipoContribuyente = new CxpTipoContribuyente();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }

    public void modificar(ActionEvent actionEvent) {
        try {            
            if(proveedor.getCxpSeriePro()!=null || !proveedor.getCxpSeriePro().equals("")){
                MessagesController.validarSerie(proveedor.getCxpSeriePro());
                
            }
            if (proveedorManager.update(proveedor) == false) {
                llamarPanelvisible(null);
            }
            proveedor = new CxpProveedor();
            cuenta = new ConCuenta();
            tipoContribuyente = new CxpTipoContribuyente();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }

    public void rowSelectionListener(RowSelectorEvent event) {
        proveedor = listaProveedores.get(event.getRow());
        switchCuenta(proveedor);
        switchTipContribuyente(proveedor);
    }   
    
     public void switchCuenta(CxpProveedor proveedor) {
        cuenta.setConCodigoCue(proveedor.getConCodigoCue());
    }
    
    public void switchTipContribuyente(CxpProveedor proveedor){
        tipoContribuyente = proveedor.getCxpCodigoTipCon();
    }
}